#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import MySQLdb
import re
import sys

## Parametrage

# Nombre d'enregistrements maximum retournes par requete

max_results = 10000000

# Nombre d'enregistrements maxi par fichier csv

max_file_size = 200000

# Nombre de lignes avant flush du fichier

flush_limit = 5000

## Connection a la base de donnees

db = MySQLdb.connect(db = "megabase", user='root', passwd = "OhGheiw8EichahGh")

## Recherche des differentes listes disponibles

cur = db.cursor()
cur.execute("SELECT `id_cat`,`nom_cat` FROM `categories` ORDER BY `id_cat` ASC")
round = cur.fetchone()

listes = []

while (round != None):
    listes.append((round[0], round[1]))
    round = cur.fetchone()

cur.close()

## Initialisation du compteur de listes

nb_listes = 0

## Parcours de la liste

for i in listes:

    ## Generation des noms de fichier

    basename = str(listes[nb_listes][0]) + '-' + listes[nb_listes][1]

    ## Initialisation des limites

    limite_start = 0
    limite_stop = max_results
    continuite = True

    ## Initialisation des compteurs

    nb_subscribers = 0
    nb_files = 0

    ## Initialisation du second curseur

    

    ## Boucle

    while continuite == True:

        ## Extraction des donnees

        cur = db.cursor()
        print('\n---------------------------------------------\n')
        print('Extraction des donnes de ' + re.sub(' ', '_', listes[nb_listes][1]))

        #if listes[nb_listes][1] == 2:
        #    cur.execute("SELECT `id`,`adresse` FROM `adresses` WHERE `categorie`=2 OR `categorie`=7 AND `bounced`=0 ORDER BY `adresse` ASC LIMIT " + str(limite_start) + "," + str(limite_stop))
        #else:
        cur.execute("SELECT `id`,`adresse` FROM `adresses` WHERE `categorie`=" + str(listes[nb_listes][0]) + " AND `bounced`=0 ORDER BY `adresse` ASC LIMIT " + str(limite_start) + "," + str(limite_stop))

        ## Incrementation des limites

        limite_start = limite_stop
        limite_stop = limite_stop + max_results

        ## Premiere iteration

        round = cur.fetchone()

        ## Initialisation du compteur de limites

        compteur_limites = 0

        ## Boucle de lecture des resultats

        print('Lecture et traitement des resultats')

        while round != None:

            ## Incrementation du compteur

            nb_subscribers = nb_subscribers + 1

            ## Lecture de l'adresse

            current_email = round[1]

            ## Separation du nom et du domaine

            current_prefix = round[1].split('@')[0]
            current_suffix = round[1].split('@')[1]

            ## Ouverture du fichier si besoin

            if nb_subscribers == 1:
                file = open(basename + '_' + str(nb_files) + '.csv', 'w')

            ## Ecriture de l'adresse et de l'entete si besoin

            ######### email marketer #########
            #if nb_subscribers == 1:
            #    file.write('"Email Address","Email Format","Confirmed","Subscribe Date (mm/dd/yyyy)"\n')
            #file.write('"' + current_email + '","HTML","Confirmed","09/26/2009"\n')
            ##################################

            ############ phplist #############
            #if (nb_subscribers == 1):
            #    file.write('email,\n')
            #file.write(current_email + ',\n')
            ##################################

            ############ indiens #############
            #file.write(current_email + '\n')
            ##################################

            ############# voloMP #############
            file.write(current_email + ',\n')
            ##################################

            ## Incrementation du compteur de limites

            compteur_limites = compteur_limites + 1

            ## Lecture des compteurs de flush

            if nb_subscribers / flush_limit > 0 and nb_subscribers % flush_limit == 0:
                file.flush()

            ## Reinitialisation des compteurs pour renouvellement de fichier

            if nb_subscribers == max_file_size:
                file.close()
                nb_files = nb_files + 1
                nb_subscribers = 0

            ## Iteration

            round = cur.fetchone()

        ## Test de continuite

        if compteur_limites < max_results:
            continuite = False

        ## Fermeture du curseur d'extraction

        cur.close()

    ## Fermeture du fichier

    file.close()

    ## Incrementation du compteur de listes

    nb_listes = nb_listes + 1

## Fin du script

print('\n---------------------------------------------\n')
print('\nFini !!\n\n')

sys.exit(0)
